package concoursbelote;
/**
 * Cette classe répertorie toutes les erreurs possibles lors de l'exécution du programme. Elle répertorie également tous les tests possible lors de divers évènement
 * @author Shehu
 *
 */
public class Erreur 
{
	//*********************************************************
	//			METHODS
	//*********************************************************
	/**
	 * Vérifie si la liste des bars est vide ou non
	 * @author Shehu
	 */
	public static void existenceBar()
	{
		if(Main.repertoireBar.isEmpty())
		{
			System.out.println("Il n'y aucun bar d'enregistré.");
			Main.afficherMenu();
		}
	}
	
	/**
	 * Vérifie si il y a un minimum un serveur dans le bar selectionné
	 * @author Shehu
	 */
	public static void existenceServeur()
	{
		if(Administration.currentBar.serveur.isEmpty())
		{
			System.out.println("Il n'y a pas de serveur dans ce bar. Qui va vous servir?");
			Main.menuAdministration();
		}
	}
	
	/**
	 * Verifie si la boisson demandé est toujours en stocks
	 * @param indexBoisson
	 * @return
	 */
	public static boolean plusBoissonFavorite(int indexBoisson)
	{
		if(Administration.currentBar.mesBoissons.get(indexBoisson).getStocks() == 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * Permet de à l'utilisateur de choisir de commander ou non la boisson manquante
	 * @author Guillaume
	 * @param reponse
	 * @return un boolean sur le choix de l'utilisateur (faux par défaut)
	 */
	public static boolean choixCommande(String reponse)
	{
		if(reponse.equalsIgnoreCase("n") || reponse.equalsIgnoreCase("non"))
		{
			return false;
		}
		else if(reponse.equalsIgnoreCase("o") || reponse.equalsIgnoreCase("oui"))
		{
			return true;
		}
		else if(reponse.equalsIgnoreCase("q"))
		{
			Main.afficherMenu();
		}
		else if(reponse.equalsIgnoreCase("x"))
		{
			System.exit(0);
		}
		return false;
	}
	
	/**
	 * Vérifie si le serveur en cours est une femme ou non. Si c'est une femme, et qu'elle a un bon coefficient de charme, elle incite le client à consommer.
	 *  @author Guillaume
	 * @param indexServeur
	 * @return le chiffre correspondant au nombre de commande du client en cours (si le client_homme est sous le charme de la serveuse alors il commande 2 fois)
	 */
	public static int verificationSexeServeur(int indexServeur, int indexClient, int indexBoisson)
	{
		if(Administration.currentBar.serveur.get(indexServeur).getClass().getName().equalsIgnoreCase("concoursbelote.ServeurFemme") && 
                        Administration.currentBar.clients.get(indexClient).getClass().getName().equalsIgnoreCase("concoursbelote.ClientHomme"))
		{
			if(((ServeurFemme) Administration.currentBar.serveur.get(indexServeur)).getCoefficiantCharme() >= 50)
			{
				System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Vous savez que vous être bien jolie??");
				((ServeurFemme) Administration.currentBar.serveur.get(indexServeur)).faireConsommer(indexServeur, indexClient, indexBoisson);
				return 2;
			}
		}
		return 1;
	}
	
	/**
	 * Verifie si un serveur homme est embauché au minimum dans un bar afin de jouer les videurs
	 * @author Guillaume
	 */
	public static void unServeurHommeMinimum()
	{
		Integer compteur = new Integer(0);
		
		for(int i=0; i<Administration.currentBar.serveur.size(); i++)
		{
			if(Administration.currentBar.serveur.get(i).getClass().getName().equalsIgnoreCase("concoursbelote.ServeurHomme"))
			{
				compteur++;    
			}
		}
		if(compteur == 0)
		{
			System.out.println("Vous n'avez pas de serveur homme. Vous devriez en embaucher un d'urgence. Il pourra ainsi bannir les clients que se mettront à faire le bazar");
			Main.afficherMenu();
		}
	}
	
	/**
	 * Vérifie si une bar est complet ou non
	 * @author Guillaume
	 */
	public static void barComplet()
	{
		if(Administration.currentBar.clients.size() == Administration.currentBar.getNbrChaises())
		{
			System.out.println("Ce bar est complet, veuillez en choisir un autre pour y ajouter un client.");
			Main.afficherMenu();
		}
	}
	
	/**
	 * Vérifie si un client peut payer la boisson qu'il a commandé
	 * @author Guillaume
	 * @param indexClient
	 * @return true or false
	 */
	public static boolean impossibleDePayer(int indexClient)
	{
		if(Administration.currentBar.clients.get(indexClient).getCoteDePopularite() > 25)
		{
			System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Ha mince, je n'ai pas assez pour payer cette boisson");
			System.out.println("Vous êtes client régulier, nous vous offrons la différence.");
			System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Hoo! Merci beaucoup\n");
			Administration.currentBar.clients.get(indexClient).setPorteMonnaie(0);
			return false;
		}
		else if(Administration.currentBar.clients.get(indexClient).getCoteDePopularite() < 25)
		{
			if(Administration.currentBar.clients.get(indexClient).getDegreAlcoolemie() > 0.65)
			{
				System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Hooo, plus de sous!!");
				System.out.println("Dans ce cas, je suis désolé, je ne peux pas vous servir cette boisson.");
				System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Quoi, sert moi mon verre tout de suite!!!        Sans blague\n");
				Administration.currentBar.getPatronne().faireExclure(indexClient, 1);
			}
			System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Ha mince, je n'ai pas assez pour payer cette boisson");
			System.out.println("Dans ce cas, je suis désolé, je ne peux pas vous servir cette boisson.");
			System.out.println("<" + Administration.currentBar.clients.get(indexClient).getPrenom() + "> Je comprend. Excusez moi de vous avoir fait gaspiller une bouteille\n");
			return true;
		}	
		
		return false;
	}
	
	/**
	 * Verifie si la boisson entré par le client existe bien dans le bar. Renvoie une erreur dans ce cas.
	 * @author Shehu
	 * @param nomBoisson
	 * @return true or false
	 */
	public static boolean verificationExistenceBoisson(String nomBoisson)
	{
		for(int i=0; i<Administration.currentBar.mesBoissons.size(); i++)
		{
			if(Administration.currentBar.mesBoissons.get(i).getNomBoisson().equalsIgnoreCase(nomBoisson))
			{
				return true;
			}
		}
		System.out.println("Cette boisson n'existe pas");
		return false;
	}
	
	/**
	 * Si la serveuse a accepter un dinner avec le client, alors ce client ne vas boire que des boissons sans alcool
	 * @author Guillaume
	 * @param indexClient
	 * @param indexBoisson
	 * @return indexBoisson
	 */
	public int siDinner(int indexClient, int indexBoisson)
	{
		if(((ClientHomme)Administration.currentBar.clients.get(indexClient)).isArreteDeBoire())
		{
			indexBoisson = Administration.selectionBoissonSansAlcool();
		}
		return indexBoisson;
	}
        
        /**
                      * Permet de vérifier si la liste de bar n'est pas vide
                      * @author Guillaume
                      */
        public static void pasDeBar()
        {
            if(Main.repertoireBar.isEmpty())
            {
                System.out.println("Il n'y a pas de bar d'enregistré");
                Main.afficherMenu();
            }
        }
        public static void verifClient()
        {
            if(Administration.currentBar.clients.isEmpty())
            {
                System.out.println("Il n'y a pas de client dans le bar. Qui va jouer à la belote???");
                Main.afficherMenu();
            }
            else if(Administration.currentBar.clients.size() < 4)
            {
                System.out.println("Il n'y a pas assez de client pour jouer à la belote");
                Main.afficherMenu();
            }
        }
}